package model;

import java.util.Collection;

import persistencia.AdministradorPersistenciaProducto;

public class Conjunto extends Producto{
	
	private Collection<Producto> productos;
	private float descuento;
	
	
	public Conjunto(int codigo, String nombre, float descuento){
		super();
		this.tipo = "C"; /* IDENTIFICA A UN PRODUCTO COMO CONJUNTO */
		this.codigo = codigo;
		this.nombre = nombre;
		this.descuento = descuento;
		this.productos = AdministradorPersistenciaProducto.getInstancia().selectProductosConjunto(codigo);
	}
	
	/* ASIGNA UN PRODUCTO A UN CONJUNTO */
	
	public void agregarProductoAConjunto(Producto producto){
		productos.add(producto);
		AdministradorPersistenciaProducto.getInstancia().insertProductoAConjunto(this.codigo, producto);
	}
	
	/* BUSCAR PRODUCTO */
	
	public Producto buscarProductoEnConjunto(int codigo){
		Producto prod = null;
		for(Producto producto : productos){
			if(producto != null){
				prod = producto;
			}
		}
		return prod;
		
	}
	
	/* DESASOCIA UN PRODUCTO DE UN CONJUNTO */
	
	public void eliminarProductoDeConjunto(Producto producto){
		productos.remove(producto);
		AdministradorPersistenciaProducto.getInstancia().deleteProductoDeConjunto(this.codigo, producto);
	}
	
	/* CALCULA PRECIO */
	
	public float getPrecio(){
		float total = 0;
		for(Producto prod : productos){
			total = total + prod.getPrecio();
		}
		return total + ((total * descuento)/100);
	}
	
	/* OBTIENE DESCUENTO */
	
	
	public float getDescuento() {
		return descuento;
	}

	@Override
	public void descontarStock(int cantidad) {
		for(Producto prod: productos){
			prod.descontarStock(cantidad);
		}
		
	}
	
	/* SET NOMBRE */

	public void setNombre(String nombre) {
		this.nombre = nombre;
		
	}

	/* SET DESCUENTO */
	
	public void setDescuento(float descuento) {
		this.descuento = descuento;
		
	}

	@Override
	public boolean alcanzaStock(int cantidad) {
		for(Producto prod: productos){
			if(!prod.alcanzaStock(cantidad))
				return false;
		}
		return true;
	}
	
	
	





	
	
}
